package com.example.exceldemo.model;

import lombok.Data;

import java.time.LocalDateTime;

/**
 * 异步任务状态模型
 * 用于跟踪异步任务的执行状态、进度和结果
 */
@Data
public class TaskStatus {

    /**
     * 任务ID
     */
    private String taskId;
    
    /**
     * 任务类型
     */
    private String taskType;
    
    /**
     * 任务状态
     * PENDING: 待处理
     * PROCESSING: 处理中
     * COMPLETED: 已完成
     * FAILED: 失败
     */
    private String status;
    
    /**
     * 任务开始时间
     */
    private LocalDateTime startTime;
    
    /**
     * 任务完成时间
     */
    private LocalDateTime endTime;
    
    /**
     * 任务进度 (0-100)
     */
    private int progress;
    
    /**
     * 任务结果数据
     */
    private String resultData;
    
    /**
     * 错误信息（如果有）
     */
    private String errorMessage;
    
    /**
     * 相关信息（如需求编号、名称等）
     */
    private String metadata;
    
    /**
     * 构造函数
     * 
     * @param taskId 任务ID
     * @param taskType 任务类型
     */
    public TaskStatus(String taskId, String taskType) {
        this.taskId = taskId;
        this.taskType = taskType;
        this.status = "PENDING";
        this.startTime = LocalDateTime.now();
        this.progress = 0;
    }
    
    /**
     * 更新任务状态为处理中
     * 
     * @param progress 进度值
     */
    public void updateProcessing(int progress) {
        this.status = "PROCESSING";
        this.progress = progress;
    }
    
    /**
     * 更新任务状态为已完成
     * 
     * @param resultData 任务结果数据
     */
    public void updateCompleted(String resultData) {
        this.status = "COMPLETED";
        this.progress = 100;
        this.resultData = resultData;
        this.endTime = LocalDateTime.now();
    }
    
    /**
     * 更新任务状态为失败
     * 
     * @param errorMessage 错误信息
     */
    public void updateFailed(String errorMessage) {
        this.status = "FAILED";
        this.errorMessage = errorMessage;
        this.endTime = LocalDateTime.now();
    }
} 